//
//  ViewController.m
//  someDemo
//
//  Created by 上官惠阳 on 2016/11/29.
//  Copyright © 2016年 上官惠阳. All rights reserved.
/*
 UIViewController的生命周期
 1、 alloc                                   创建对象，分配空间
 2、init (initWithNibName) 初始化对象，初始化数据
 3、loadView                          从nib载入视图 ，通常这一步不需要去干涉。除非你没有使用xib文件创建视图
 4、viewDidLoad                   载入完成，可以进行自定义数据以及动态创建其他控件
 5、viewWillAppear              视图将出现在屏幕之前，马上这个视图就会被展现在屏幕上了
 6、viewDidAppear               视图已在屏幕上渲染完成

 当一个视图被移除屏幕并且销毁的时候的执行顺序，这个顺序差不多和上面的相反
 1、viewWillDisappear            视图将被从屏幕上移除之前执行
 2、viewDidDisappear             视图已经被从屏幕上移除，用户看不到这个视图了
 3、dealloc                      视图被销毁，此处需要对你在init和viewDidLoad中创建的对象进行释放
 */

#import "ViewController.h"
#import "ViewController2.h"// 代码跳转声明
#import "UITextField+Add.h"

@interface ViewController ()<UITextFieldDelegate>

@end

@implementation ViewController
//载入完成，可以进行自定义数据以及动态创建其他控件
- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *currentClassName = [NSString stringWithUTF8String:object_getClassName(self)];
    NSLog(@"%@-----%s",currentClassName,__FUNCTION__);

    //[self createLabel];

    //[self createButton];
    
    //[self cresteButton2];
    
    //[self createLabel2];
    
    //[self createTextField];
//    [self createTextField2];
    //[self createTextField2];
    
    //给passwordField设置代理
//    self.passwordField.delegate = self;

    //给loginBtn添加圆角
    self.loginBtn.layer.cornerRadius = 5;
    self.loginBtn.layer.masksToBounds = YES;

    //点击空白处收回键盘
    [self setupForDismissKeyboard];
}
//点击登陆按钮触发的事件
- (IBAction)loginAction:(id)sender
{
    //假如_phoneNumField的text为空
    if (!_phoneNumField.text.length) {
        //给_phoneNumField添加震动效果
        [_phoneNumField addShakeAnimation];

        //显示提示消息
        ShowSomeMsg(@"请输入手机号码");
        return;
    }
    //假如_phoneNumField的text不是正确的手机格式
    if(![QZChectTool isPhoneNumber:_phoneNumField.text]){
        ShowSomeMsg(@"请输入正确格式的手机号");
        return;
    }
    if (!_passwordField.text.length) {
        //给_phoneNumField添加震动效果
        [_passwordField addShakeAnimation];

        //显示提示消息
        ShowSomeMsg(@"请输入密码");
        return;
    }
    __weak typeof(self) weakSelf = self;
    NSDictionary *dic = @{@"acc":_phoneNumField.text,
                          @"pwd":_passwordField.text};
    [MHNetworkManager postReqeustWithURL:URL(@"?m=appface&c=user&a=login") params:dic successBlock:^(NSDictionary *returnData) {
        NSLog(@"returnData = %@",returnData);
//        [returnData[@"rcode"] isEqualToString:@"0"]
        if (ResultJudge) {
            //请求成功之后的操作

            //假如ViewController2没有用storyboard那么就这样跳转到ViewController2
//            ViewController2 *vc2 = [[ViewController2 alloc] init];
//            [weakSelf.navigationController pushViewController:vc2 animated:YES];

            //假如ViewController2用了storyboard那么就这样跳转到ViewController2，注意：Identifier不能写错
            ViewController2 *vc2 = [weakSelf.storyboard instantiateViewControllerWithIdentifier:@"vc2"];
            [weakSelf.navigationController pushViewController:vc2 animated:YES];
        }else{
            ShowResultMsg;
        }
    } failureBlock:^(NSError *error) {
        DTLog(@"error = %@",error);
        ShowFailMsg;
    } showHUD:YES];
}
//点击找回密码按钮触发的事件
- (IBAction)findPwdAction:(id)sender
{
    
}

#pragma mark viewController的生命周期
//初始化对象，初始化数据
- (instancetype)init
{
    self = [super init];
    if (self) {

        NSString *currentClassName = [NSString stringWithUTF8String:object_getClassName(self)];
        NSLog(@"%@-----%s",currentClassName,__FUNCTION__);
    }
    return self;
}
//从nib载入视图 ，通常这一步不需要去干涉。除非你没有使用xib文件创建视图
//- (void)loadView
//{
//    NSString *currentClassName = [NSString stringWithUTF8String:object_getClassName(self)];
//    NSLog(@"%@-----%s",currentClassName,__FUNCTION__);
//}
//载入完成，可以进行自定义数据以及动态创建其他控件
//- (void)viewDidLoad
//{
//
//}
//视图将出现在屏幕之前，马上这个视图就会被展现在屏幕上了
- (void)viewWillAppear:(BOOL)animated
{
    NSString *currentClassName = [NSString stringWithUTF8String:object_getClassName(self)];
    NSLog(@"%@-----%s",currentClassName,__FUNCTION__);
}
//视图已在屏幕上渲染完成
- (void)viewDidAppear:(BOOL)animated
{
    NSString *currentClassName = [NSString stringWithUTF8String:object_getClassName(self)];
    NSLog(@"%@-----%s",currentClassName,__FUNCTION__);
}
//视图将被从屏幕上移除之前执行
- (void)viewWillDisappear:(BOOL)animated
{
    NSString *currentClassName = [NSString stringWithUTF8String:object_getClassName(self)];
    NSLog(@"%@-----%s",currentClassName,__FUNCTION__);
}
//视图已经被从屏幕上移除，用户看不到这个视图了
- (void)viewDidDisappear:(BOOL)animated
{
    NSString *currentClassName = [NSString stringWithUTF8String:object_getClassName(self)];
    NSLog(@"%@-----%s",currentClassName,__FUNCTION__);
}
//视图被销毁，此处需要对你在init和viewDidLoad中创建的对象进行释放
- (void)dealloc
{
    NSString *currentClassName = [NSString stringWithUTF8String:object_getClassName(self)];
    NSLog(@"%@-----%s",currentClassName,__FUNCTION__);
}
//当内存出现警告时调用
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
#pragma mark createSomeView
//UILabel是文本标签，是用来显示文本的
- (void)createLabel2
{
    CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
    CGFloat screenHeigth = [UIScreen mainScreen].bounds.size.height;
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(screenWidth-200, screenHeigth-200, 100,100)];
    
    label.textColor = [UIColor redColor];
    label.text =@"我是一个label";
    label.backgroundColor =[UIColor yellowColor];
    
    [self.view addSubview:label];
}
//UILabel是文本标签，是用来显示文本的
- (void)createLabel
{
    //创建uilabel
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)];

    //设置背景色
    label.backgroundColor = [UIColor grayColor];

    //设置标签文本
    label.text = @"我是一个label";

    //设置标签文本字体和字体大小

    label.font = [UIFont systemFontOfSize:17];

    //设置文本对齐方式
    label.textAlignment = NSTextAlignmentLeft;

    //文本对齐方式有以下三种
    /*
    typedef enum {

        NSTextAlignmentLeft = 0,左对齐

        NSTextAlignmentCenter,居中对齐

        NSTextAlignmentRight, 右对齐

    } NSTextAlignment;
     */

    //文本颜色
    label.textColor = [UIColor blueColor];

    //文本文字自适应大小
    //当adjustsFontSizeToFitWidth=YES时候，如果文本font要缩小时
    label.adjustsFontSizeToFitWidth = YES;

    //baselineAdjustment这个值控制文本的基线位置，只有文本行数为1是有效
    label.baselineAdjustment = UIBaselineAdjustmentNone;

    //有三种方式
    /*
    typedef enum {
        UIBaselineAdjustmentAlignBaselines = 0, 默认值文本最上端于label中线对齐
        UIBaselineAdjustmentAlignCenters,//文本中线于label中线对齐
        UIBaselineAdjustmentNone,//文本最低端与label中线对齐
    } UIBaselineAdjustment;
     */

    //文本最多行数，为0时没有最大行数限制

    label.numberOfLines = 1;

    //将label加上视图上
    [self.view addSubview:label];
}
- (void)createTextField2
{   CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
    CGFloat screenHeigth = [UIScreen mainScreen].bounds.size.height;
    
    UITextField *textField =[[UITextField alloc]initWithFrame:CGRectMake((screenWidth-200)/2, (screenHeigth-40)/2,200,40)];
    textField.borderStyle = UITextBorderStyleNone;
    textField.backgroundColor = [UIColor greenColor];
    textField.placeholder = @"请输入邮件";
    textField.font = [UIFont systemFontOfSize:20];
    textField.textColor = [UIColor redColor];
    //textField.text = @"开始文字";
    textField.secureTextEntry = YES;
    
    textField.keyboardType = UIKeyboardTypeEmailAddress;
    textField.textAlignment = NSTextAlignmentCenter;
    textField.returnKeyType = UIReturnKeyDone;

    textField.clearsOnBeginEditing = YES;
    textField.clearButtonMode = UITextFieldViewModeAlways;
    [self.view addSubview:textField];
    
    //键盘主动弹起
    //[textField becomeFirstResponder];
    
    textField.delegate = self;
}
- (void)createTextField
{
    //初始化textfield并设置位置及大小
    UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(20,180, 130, 30)];

    //设置边框样式，只有设置了才会显示边框样式
    textField.borderStyle = UITextBorderStyleLine;

    /*
    　typedef enum {
        UITextBorderStyleNone,
        UITextBorderStyleLine,
        UITextBorderStyleBezel,
        UITextBorderStyleRoundedRect
    } UITextBorderStyle;
     */

    //设置输入框的背景颜色，此时设置为白色 如果使用了自定义的背景图片边框会被忽略掉
    textField.backgroundColor = [UIColor yellowColor];

    //当输入框没有内容时，水印提示 提示内容为password
    textField.placeholder = @"password";

    //设置输入框内容的字体样式和大小
    textField.font = [UIFont systemFontOfSize:17];

    //设置字体颜色
    textField.textColor = [UIColor redColor];

    //输入框中是否有个叉号，在什么时候显示，用于一次性删除输入框中的内容
    textField.clearButtonMode = UITextFieldViewModeAlways;

    /*
    typedef enum {
        UITextFieldViewModeNever,　重不出现
        UITextFieldViewModeWhileEditing, 编辑时出现
        UITextFieldViewModeUnlessEditing,　除了编辑外都出现
        UITextFieldViewModeAlways 　一直出现
    } UITextFieldViewMode;
     */

    //输入框中一开始就有的文字
    textField.text = @"一开始就在输入框的文字";

    //每输入一个字符就变成点 用语密码输入
    textField.secureTextEntry = NO;

    //是否纠错
    textField.autocorrectionType = UITextAutocorrectionTypeNo;

    /*
    typedef enum {
        UITextAutocorrectionTypeDefault, 默认
        UITextAutocorrectionTypeNo, 　不自动纠错
        UITextAutocorrectionTypeYes,　自动纠错
    } UITextAutocorrectionType;
     */
    //再次编辑就清空
    textField.clearsOnBeginEditing = YES;

    //内容的垂直对齐方式
    textField.textAlignment = NSTextAlignmentCenter;

    //设置键盘的样式
    textField.keyboardType = UIKeyboardTypeEmailAddress;

    /*
    typedef enum {
        UIKeyboardTypeDefault,     　默认键盘，支持所有字符
        UIKeyboardTypeASCIICapable,　支持ASCII的默认键盘
        UIKeyboardTypeNumbersAndPunctuation,　标准电话键盘，支持＋＊＃字符
        UIKeyboardTypeURL,            URL键盘，支持.com按钮 只支持URL字符
        UIKeyboardTypeNumberPad,            　数字键盘
        UIKeyboardTypePhonePad,　 　电话键盘
        UIKeyboardTypeNamePhonePad, 　电话键盘，也支持输入人名
        UIKeyboardTypeEmailAddress, 　用于输入电子 邮件地址的键盘
        UIKeyboardTypeDecimalPad,   　数字键盘 有数字和小数点
        UIKeyboardTypeTwitter,      　优化的键盘，方便输入@、#字符
        UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable,
    } UIKeyboardType;
     */

    //首字母是否大写
    textField.autocapitalizationType = UITextAutocapitalizationTypeNone;

    /*
    typedef enum {
        UITextAutocapitalizationTypeNone, 不自动大写
        UITextAutocapitalizationTypeWords,　单词首字母大写
        UITextAutocapitalizationTypeSentences,　句子的首字母大写
        UITextAutocapitalizationTypeAllCharacters, 所有字母都大写
    } UITextAutocapitalizationType;
     */

    //return键变成什么键
    textField.returnKeyType =UIReturnKeyNext;

    /*
    typedef enum {
        UIReturnKeyDefault, 默认 灰色按钮，标有Return
        UIReturnKeyGo,    　标有Go的蓝色按钮
        UIReturnKeyGoogle,标有Google的蓝色按钮，用语搜索
        UIReturnKeyJoin,标有Join的蓝色按钮
        UIReturnKeyNext,标有Next的蓝色按钮
        UIReturnKeyRoute,标有Route的蓝色按钮
        UIReturnKeySearch,标有Search的蓝色按钮
        UIReturnKeySend,标有Send的蓝色按钮
        UIReturnKeyYahoo,标有Yahoo的蓝色按钮
        UIReturnKeyYahoo,标有Yahoo的蓝色按钮
        UIReturnKeyEmergencyCall, 紧急呼叫按钮
    } UIReturnKeyType;
     */

    //键盘外观
    textField.keyboardAppearance = UIKeyboardAppearanceDefault;

    /*
    typedef enum {
        UIKeyboardAppearanceDefault， 默认外观，浅灰色
        UIKeyboardAppearanceAlert，　 　深灰 石墨色

    } UIReturnKeyType;
     */

    //把textfield加到视图中
    [self.view addSubview:textField];

    textField.delegate = self; //声明text的代理是我，我会去实现把键盘往下收的方法 这个方法在UITextFieldDelegate里所以我们要采用UITextFieldDelegate这个协议
}
- (void)cresteButton2
{
    UIButton *button2 = [UIButton buttonWithType:UIButtonTypeCustom];
    button2.frame = CGRectMake(20,200,100,50);
    button2.backgroundColor = [UIColor yellowColor];
    //[button2 setImage:[UIImage imageNamed:@"che.png"] forState:UIControlStateNormal];
    [button2 setBackgroundImage:[UIImage imageNamed:@"che.png"] forState:UIControlStateNormal];
    [button2 setTitle:@"kaishi" forState:UIControlStateNormal];
    [button2 setTitleColor:[UIColor yellowColor] forState:UIControlStateNormal];
    
    [button2 addTarget:self action:@selector(selector1:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.view addSubview:button2];
}
- (void)selector1:(UIButton *)btn
{
    [btn setTitle:@"8888888888888" forState:UIControlStateNormal];
}
- (void)createButton
{
    //这里创建一个圆角矩形的按钮
    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];

    // 能够定义的button类型有以下6种，
    // typedef enum {
    // UIButtonTypeCustom = 0, 自定义风格
    // UIButtonTypeRoundedRect, 圆角矩形
    // UIButtonTypeDetailDisclosure, 蓝色小箭头按钮，主要做详细说明用
    // UIButtonTypeInfoLight, 亮色感叹号
    // UIButtonTypeInfoDark, 暗色感叹号
    // UIButtonTypeContactAdd, 十字加号按钮
    // } UIButtonType;

    //给定button在view上的位置
    button1.frame = CGRectMake(20, 200, 280, 40);

    //button背景色
    button1.backgroundColor = [UIColor redColor];

    //设置button填充图片
//    [button1 setImage:[UIImage imageNamed:@"che.png"] forState:UIControlStateNormal];

    //设置button背景图片
    [button1 setBackgroundImage:[UIImage imageNamed:@"che.png"] forState:UIControlStateNormal];

    //设置button标题
    [button1 setTitle:@"点击" forState:UIControlStateNormal];

    //设置button的标题颜色
    [button1 setTitleColor:[UIColor yellowColor] forState:UIControlStateNormal];

    [button1 setTitleColor:[UIColor redColor] forState:UIControlStateSelected];

    [button1 setTitleColor:[UIColor greenColor] forState:UIControlStateHighlighted];

    //设置button的标题字体
    button1.titleLabel.font = [UIFont systemFontOfSize:18];

    /* forState: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现*/
    //以下是几种状态
    // enum {
    // UIControlStateNormal = 0, 常规状态显现
    // UIControlStateHighlighted = 1 << 0, 高亮状态显现
    // UIControlStateDisabled = 1 << 1, 禁用的状态才会显现
    // UIControlStateSelected = 1 << 2, 选中状态
    // UIControlStateApplication = 0x00FF0000, 当应用程序标志时
    // UIControlStateReserved = 0xFF000000 为内部框架预留，可以不管他
    // };

    /*
    addTarget:self 是链接到self,一般都这样设置
    action:@selector(alarmTimeDone:) 时间处理函数
    forControlEvents:UIControlEventTouchUpInside 控件事件处理的消息
    */
    //所有在控件之内触摸抬起事件触发butClick和alarmTimeDone事件
    [button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside];

    [button1 addTarget:self action:@selector(alarmTimeDone:) forControlEvents:UIControlEventTouchUpInside
     ];

    //当一次触摸在控件窗口内拖动时触发dragInside事件
    [button1 addTarget:self action:@selector(dragInside) forControlEvents:UIControlEventTouchDragInside];


    //当一次触摸在控件窗口之外拖动时dragOutside事件
    [button1 addTarget:self action:@selector(dragOutside) forControlEvents:UIControlEventTouchDragOutside];


    //显示控件
    [self.view addSubview:button1];
    //取消按钮已经添加的所有事件:(这个比较重要,若添加了两个事件  两个事件都会被触发)
    //[button1 removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];

    /*
    IOS UIButton事件：

    UIControlEventTouchDown 单点触摸按下事件：用户点触屏幕，或者又有新手指落下的时候。

    UIControlEventTouchDownRepeat 多点触摸按下事件，点触计数大于1：用户按下第二、三、或第四根手指的时候。

    UIControlEventTouchDragInside 当一次触摸在控件窗口内拖动时。

    UIControlEventTouchDragOutside 当一次触摸在控件窗口之外拖动时。

    UIControlEventTouchDragEnter 当一次触摸从控件窗口之外拖动到内部时。

    UIControlEventTouchDragExit 当一次触摸从控件窗口内部拖动到外部时。

    UIControlEventTouchUpInside 所有在控件之内触摸抬起事件。

    UIControlEventTouchUpOutside 所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。

    UIControlEventTouchCancel 所有触摸取消事件，即一次触摸因为放上了太多手指而被取消，或者被上锁或者电话呼叫打断。
    
    UIControlEventTouchChanged 当控件的值发生改变时，发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知，在滑块被放下时发送，或者在被拖动时发送。
    
    UIControlEventEditingDidBegin 当文本控件中开始编辑时发送通知。
    
    UIControlEventEditingChanged 当文本控件中的文本被改变时发送通知。
    
    UIControlEventEditingDidEnd 当文本控件中编辑结束时发送通知。
    
    UIControlEventEditingDidOnExit 当文本控件内通过按下回车键（或等价行为）结束编辑时，发送通知。
    
    UIControlEventAlltouchEvents 通知所有触摸事件。
    
    UIControlEventAllEditingEvents 通知所有关于文本编辑的事件。
     */
}
//点击触发的事件
- (void)butClick:(UIButton *)btn
{
    btn.selected = !btn.selected;
}
//点击触发的事件
- (void)alarmTimeDone:(UIButton *)btn
{

}
//拖动触发的事件
- (void)dragInside
{

}
- (void)dragOutside
{

}
#pragma mark textFieldDelegate
//开始编辑时触发，返回一个BOOL值，指定是否循序文本字段开始编辑,返回NO时不能唤起键盘进行编辑
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

//    return NO;
    return YES;
}
//开始编辑时触发
- (void)textFieldDidBeginEditing:(UITextField *)textField{

}
//当内容发生改变时就会调用这个方法。
//要防止文字被改变可以返回NO
//这个方法的参数中有一个NSRange对象，指明了被改变文字的位置，建议修改的文本也在其中
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{


    return YES;
}
//点击右边的清除按钮时触发，返回一个BOOL值指明是否允许根据用户请求清除内容
- (BOOL)textFieldShouldClear:(UITextField *)textField{
    return YES;//返回YES，输入内容后，点击右边的清除按钮可以清除，返回NO，点击清除不起作用
}
//按下回车键时触发，返回一个BOOL值，指明是否允许在按下回车键时结束编辑
//如果允许要调用resignFirstResponder 方法，这会导致结束编辑，而键盘会被收起[textField resignFirstResponder];
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder]; //主要是[receiver resignFirstResponder]在哪调用就能把receiver对应的键盘往下收
    return YES;
}
//返回BOOL值，指定是否允许文本字段结束编辑，当编辑结束
//要想在用户结束编辑时阻止文本字段消失，可以返回NO
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{

    return YES;//一直处于编辑状态
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
    
}
@end
